package com.aqie.demo.npe;

import com.aqie.demo.bean.User;

import java.util.Optional;

/**
 * @author: aqie
 * @create: 2020-12-26 19:12
 **/
public class UnboxNpe {
    Integer a = 0;

    private static User getUser(){
        return new User();
        // Throwable
        // RuntimeException
        // Error

    }

    public static void main(String[] args) {
        User user = new User("aqie");
        Optional<User> optionalUser = Optional.ofNullable(user);
        // 存在即返回, 空则提供默认值
        optionalUser.orElse(new User());
        // 存在即返回, 空则由函数去产生
        optionalUser.orElseGet(() -> getUser());
        // 存在即返回, 否则抛出异常
        optionalUser.orElseThrow(RuntimeException::new);

        // 存在才去做相应的处理
        optionalUser.ifPresent(u -> System.out.println(u.getName()));

        // map 可以对 Optional 中的对象执行某种操作, 且会返回一个 Optional 对象
        optionalUser.map(u -> u.getName()).orElse("anymos");

        // map 是可以无限级联操作的
        optionalUser.map(u -> u.getName()).map(name -> name.length()).orElse(0);

    }
}
